import validator from 'validator';
import {
  queryVerificationCode,
  loginByVerificationCode,
  loginQucikly
} from "../../service/user"
const app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 登录方式，0-短信快捷登录，1-账户密码登录
    loginMethod: 0,
    // 手机号
    phoneNumber: null,
    // 验证码
    verificationCode: null,
    // 密码
    password: null,
    // 是否同意用户协议
    agree: false,
    // 验证码倒计时
    timeout: 60,
    // 是否展示对话框
    isShowAgreement: false
  },
  async onTapShowToast(){
    try {
      await this.showDialog()
    }catch{
      
    }
  },
  /**
   * 快捷登录
   */
  async getPhoneNumber(event) {
    wx.showLoading({
      title: '登陆中',
    })
    this.setData({
      agree: true
    })
    if (event.detail.code) {
      try {
        const res = await loginQucikly(event.detail.code)
        wx.setStorageSync('token', res.data);
        app.globalData.isLogin = true
        wx.showToast({
          title: '登录成功！',
          icon: "success",
          duration: 1500,
          mask: true
        })
        wx.switchTab({
          url: '/pages/User/User',
        })
      } finally {
        wx.hideLoading()
      }
    } else {
      wx.showToast({
        title: '取消快捷登录',
        icon: "none"
      })
    }
  },

  // 清空Promise回调
  clearCallbacks() {
    this.setData({
      resolveCallback: null,
      rejectCallback: null
    });
  },
  // 展示对话框
  showDialog() {
    this.clearCallbacks()
    return new Promise((resolve, reject) => {
      this.setData({
        isShowAgreement: true,
        resolveCallback: resolve,
        rejectCallback: reject
      })
    })
  },

  /**
   * 点击同意按钮
   */
  agreeHandle() {
    this.setData({
      isShowAgreement: false,
      agree: true
    })
    this.data.resolveCallback({
      agree: true
    });
    this.clearCallbacks()
  },
  /**
   *  点击注册按钮
   */
  onTapNewUsersRegistration() {
    this.setData({
      loginMethod: 0
    })
  },
  /**
   * 点击不同意按钮
   */
  disagreeHandle() {
    this.setData({
      isShowAgreement: false
    })
    // 执行reject，传递“不同意”结果
    this.data.rejectCallback({
      agree: false
    });
    // 清空回调
    this.clearCallbacks();
  },
  // 点击获取验证码
  async onTapQueryVerificationCode() {
    const phoneNumber = this.data.phoneNumber
    // 验证手机号
    if (!phoneNumber || !validator.isMobilePhone(phoneNumber, 'zh-CN')) {
      wx.showToast({
        title: '请输入正确的手机号码！',
        icon: 'none',
        duration: 1000
      })
      return
    }
    // 开启对话框请求用户同意用户协议
    if (!this.data.agree) {
      try {
        await this.showDialog()
      } catch (err) {
        return
      }
    }

    // 开启计时器
    this.setData({
      timeout: 60
    })
    await queryVerificationCode(phoneNumber)
    this.startTimer()
    wx.showToast({
      title: '请在手机上查收验证码~',
      icon: 'none',
      duration: 1500
    })
  },
  /**
   * 开启计时器
   */
  startTimer() {
    const self = this
    const timer = setInterval(() => {
      self.setData({
        timeout: self.data.timeout - 1
      })
      if (self.data.timeout < 0) {
        clearInterval(timer)
        self.setData({
          timeout: 60
        })
      }
    }, 1000)
  },
  /**
   * 点击验证码登录按钮
   */
  async onTapVerificationCodeLoginButton() {
    const phoneNumber = this.data.phoneNumber
    const verificationCode = this.data.verificationCode
    // 验证手机号
    if (!phoneNumber || !validator.isMobilePhone(phoneNumber, 'zh-CN')) {
      wx.showToast({
        title: '请输入正确的手机号码！',
        icon: 'none',
        duration: 1000
      })
      return
    }
    // 验证验证码
    if (!verificationCode || !(validator.isInt(verificationCode) && validator.isLength(verificationCode, {
        min: 6,
        max: 6
      }))) {
      wx.showToast({
        title: '验证码格式错误！',
        icon: 'none',
        duration: 1000
      })
      return
    }
    const res = await loginByVerificationCode(phoneNumber, verificationCode)
    if (res.code === 0) {
      wx.showToast({
        title: res.message,
        icon: "error",
        duration: 1500,
        mask: true
      })
    } else {
      // 保存Token
      wx.setStorageSync('token', res.data);
      app.globalData.isLogin = true
      wx.showToast({
        title: '登录成功！',
        icon: "success",
        duration: 1500,
        mask: true
      })
      wx.switchTab({
        url: '/pages/User/User',
      })
    }
  },

  /**
   * 点击前往服务条款页面
   */
  onTapNavigateToTermsOfService() {
    wx.navigateTo({
      url: '/pages/TermsOfService/TermsOfService',
    })
  },
  /**
   *  点击前往隐私策略页面
   */
  onTapNavigateToPrivacyPolicies() {
    wx.navigateTo({
      url: '/pages/PrivacyPolicy/PrivacyPolicy',
    })
  },
  /**
   * 点击更改同意状态
   */
  onChangeAgree(event) {
    this.setData({
      agree: event.detail
    })
  },
  /**
   * 点击登录方法选择按钮
   */
  onTapTabItem(event) {
    const index = event.currentTarget.dataset.index
    this.setData({
      loginMethod: index
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})